前言
最近在审计红帆ioffice .net 的代码,发现了许许多多的漏洞。如多处的未授权的SQL注入,前后台的任意文件下载,前台的任意文件写入,已经被修复的前台任意文件上传,还有任意用户登录漏洞。因此写下自己对红帆ioffice漏洞利用技巧。
红帆ioffice利用技巧
红帆ioffice在测试过程中的问题
用户密码解密
过程分析
红帆ioffice的默认数据库是ioffice,默认用户名是ioffice,存放用户数据的表是mrbaseinf。
如当我们测到SQL注入时,想要进后台,所以直接使用命令
python3 sqlmap.py -r 2.txt -D ioffice -T mrbaseinf -C "loginid,Pwd,sysSam,CheckSam" --dump
拿到密码后,这个时候就应该考虑到解密的问题了。
红帆的默认密码是96-E7-92-18-96-5E-B7-2C-92-A5-49-DD-5A-33-01-12,即111111。
实际上这里是md5(111111),即每两个字符中添加一个-。
从代码层面分析发现,这段算法就是md5,不可逆,因此只能考虑去掉-后,在通过cmd5查hash值,得到明文。
当然cmd5也不是所有hash都能查到的,这里就得借助sam了。
注:sam的全称是security account manager,即安全账号管理
红帆在设计的时候,可能考虑到了hash不可逆的因素,怕用户忘记密码,导致密码无法被解,因此在数据表字段设计的时候,增加了sysSam和checkSam。简单的说,这两个值解出来后,可能就是pwd字段的明文。
通过查询默认的checkSam或者sysSam的值时,会发现。
在使用sql语句更新时,又增加了sysSam。
注:此处文档中admin的密码是111111
因此如果解密不出密码时,覆盖密码最好是添加一个sysSam。
利用总结
用sql注入获取数据,进后台时,可以利用该方法尝试解密密码。
配置文件dbpwd解密
过程分析
.net的配置文件是web.config,数据库连接信息是在appSettings节点中。
查看ioffice的配置文件,发现数据库的连接密码被加密了,因此就需要解密该密码了。
.net加载web.config的节点,是通过System.Web.Configuration.WebConfigurationManager。
如这里需要加载appSettings,那么则需要调用WebConfigurationManager下的AppSettings方法去获取到配置文件的相关参数的。
通过dnspy反编译/ioffice/bin目录下的dll文件。
在iOWebCSP.dll文件中,即iOWebCSP对象下的GetWebDbConnectString方法中,我们可以看见ioffice是如何连接数据库的。
可以看见,在第131行中有这样一段代码
1 | text3 = this.b(WebConfigurationManager.AppSettings["dbpwd"]); |
获取到dbpwd后,调用当前对象下的b方法进行解密操作。
跟进后,发现也就是一个des加解密的问题。
1 | private string b(string A_0) |
跟进到des后发现,密钥和偏移量是直接在构造方法iOWebCSP中被初始化了。
直接编写解密脚本。
拿到明文密码就就想着要登录数据库咯。
在cnstr中,server=.代表server=127.0.0.1:1433,database="ioffice",还不知道数据库连接用户是谁。
继续往下看。
变量d是直接在构造方法中被初始化成了ioffice,即当前数据库用户(默认数据库用户)是ioffice。
最终成功连上数据库
利用总结
ioffice有任意文件下载漏洞,当获取到web.config时,可解密密码,恰好1433开放,就能直接起飞。
当拿到服务器权限时,进不去后台,可通过此方法连上数据库,再解密用户密码,能登录后台。
webshell 解析问题
过程分析
审计时发现了任意文件写入和任意文件上传漏洞后(不会重命名),尝试利用,默认写入和上传路径都是在/ioffice/upfiles/目录下,分析代码和实际测试发现,文件不会重命名。
最开始是在/ioffice/upfiles/目录下传aspx、ashx和asmx等.net 可解析的脚本文件。直接访问,发现是会被重定向的。
注:文件存在和不存在都会被重定向
后来有师傅告诉我说,红帆都是传的asp马。
但是实际测试发现,asp马的执行权限非常的低,所以还是得传.net的马。
最后测试发现,可以传到/iOffice/Identity/目录下。
利用总结
直接跨目录将webshell写到/iOffice/Identity/即可。
总结
红帆ioffice,现在互联网产品的案例是很少了的,代码大概也都是七八年前的那批程序员写的,所以漏洞许许多多各种各样。通过审计前人留下的坑,增长了自身对漏洞代码的认识,这个还是很不错的。
在审计红帆OA时,还发现可能存在xxe漏洞和Newtonsoft.Json反序列化漏洞。但是由于默认配置原因,利用不成功,还是比较遗憾的。